﻿using System.Collections.Immutable;
using RJi.FanucInterface3.Common.Internal;

namespace RJi.FanucInterface3.DataParser.Internal;

internal static class ParserFactory
{
    // 使用Lazy<T>保证线程安全的延迟初始化
    private static readonly Lazy<ImmutableArray<IDataParser>> LazyParsers = new(
        () =>
        [
            new DataAlarmParser(),
            new DataSysVarParser(),
            new DataNumRegParser(),
            new DataPositionParser(),
            new DataStringParser(),
            new DataTaskParser()
        ]);

    // 公开只读视图（避免外部修改）
    private static ImmutableArray<IDataParser> Parsers
    {
        get { return LazyParsers.Value; }
    }

    public static IDataParser GetParser(VariableMetadata metadata)
    {
        ArgumentNullException.ThrowIfNull(metadata);

        return Parsers.FirstOrDefault(p => p.CanHandle(metadata))
               ?? throw new NotSupportedException($"No parser for type: {metadata.DataType.Name}");
    }
}